package com.example.druid;

import com.alibaba.druid.pool.DruidDataSourceFactory;

import javax.sql.DataSource;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Properties;

/*
 * 在静态代码块中加载配置文件 随着类的加载而执行
 * */
public class DruidUtil {
    //以为在下面的获取数据库连接方法时会用到DataSource（数据库连接池对象）获取连接所以创建成员变量
    private static DataSource ds;
    /**
     *
     * 在静态代码块中加载配置文件 随着类的加载而执行
     * */
    static{
        try {
            Properties pro=new Properties();
            //类加载器加载配置文件
            InputStream in =    DruidUtil.class.getClassLoader().getResourceAsStream("druid.properties");
            pro.load(in);
            ds = DruidDataSourceFactory.createDataSource(pro);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     获取连接  直接使用数据库连接池对象条用getConnection()方法
     */
    public static Connection getConn () throws Exception {
        return ds.getConnection();
    }

    /**
     * 释放资源
     * */
    public static void close(Connection conn, Statement stm, ResultSet rs){
        try {
            if (conn!=null)conn.close();
        } catch (Exception throwables) {
            throwables.printStackTrace();
        }
        try {
            if (stm!=null)stm.close();
        } catch (Exception throwables) {
            throwables.printStackTrace();
        }
        try {
            if (rs!=null)rs.close();
        } catch (Exception throwables) {
            throwables.printStackTrace();
        }
    }


    /**
     *重载close方法
     * */
    public static  void close(Connection conn,Statement stm){
        close(conn,stm,null);
    }

}

